﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Example
{
    /// <summary>
    /// 在 wikidoc 语法中，换行本身并不构成一个段落，
    /// 因此这一行和上一行在输出中是同一段落。
    /// 
    /// 要形成一个段落，必须要添加一个空白行，
    /// 就像这个段落和上面那个段落间的空白行一样。
    /// </summary>
    /// <remarks>
    /// == 列表 ==
    /// === 数字列表 ==
    /// 数字列表的语法 1，数字后添加小数点
    ///  1. 列表项一
    ///  1. 列表项二
    ///  3. 列表项三
    /// 可以看到，数字本身是多少并没有关系的。
    /// 
    /// 数字列表的语法 1，数字后添加中文顿号
    ///  1、 列表项一
    ///  1、 列表项二
    ///  3、 列表项三
    /// 
    /// === 符号列表 ===
    /// 符号列表，一般是以一个或多个空格开头，跟一个列表标志字符，后跟一个空格以及列表内容，例如
    ///  * 列表项一
    ///  × 列表项二
    /// 可以用作列表标志字符的字符包括 星号(*)，中文星号(×)，减号(-)，中文破折号(—)
    /// 
    /// === 续行 ===
    /// 如果一个列表项比较长，可以换行写为多行，后续行必须缩进多余列表符号对应的列即可，如
    ///  × 假设这是一个很长的列表行，
    ///     我们从这里开始第二行，
    ///     然后是第三行，这三行在输出时是作为一个列表项对待的。
    ///  × 这一行使用了列表定义符号，所以将被作为第二个列表项。
    ///     这一项也可以分为两行来写。
    /// 
    ///  × 这将成为第三项，可以看出，可以用空行来分割列表项，有时候这样更容易阅读。
    /// 
    /// === 列表嵌套 ===
    /// 列表项可以嵌套，即一个列表项下可以在细分，只要缩进随意的空格即可，例如
    ///  × 这是第一级列表的第一项
    ///     × 第一项的嵌套列表项，这是第一小项
    ///     × 这是第二小项
    ///  × 从这里开始，缩进级别和上级相同，所以这是第一级列表的第二项
    /// 
    /// == 代码段 ===
    /// 在三个连续的花括号 {{{ }}} 中的部分被解析为代码段，例如
    /// {{{
    /// some code here
    /// ...
    /// }}}
    /// 起始和终止的花括号必须独立一行
    /// 
    /// 对代码段的解析，可以自定义一些解析器，目前实行了一个 csv 表格解析器，可用来表示表格
    /// 如：
    /// {{{ csv ，
    /// row1，col2，col3
    /// row2，col2，col3
    /// }}}
    /// 起始的三个花括号后用一个空格标志解析器名称 csv，然后是解析器参数，csv 解析器可带一个参数
    /// 表示使用什么字符作为字段分隔符，例如上例中使用中文的逗号(，)
    /// 
    /// 空格开始的行也被识别为代码段，例如
    ///   foreach (var item in list)
    ///   {
    ///        some code here
    ///        ...
    ///   }
    /// 
    /// == 横线 ==
    /// 至少4个连续的减号
    /// 
    /// ----
    /// -----
    /// ------
    /// 
    /// == 表格 ==
    /// 也可以使用竖线风格的表格，每行用两个竖线开始以及结束，单元格之间用两个竖线分割，例如：
    /// || row1 || col2 || col3 ||
    /// || row2 || col2 || col3 ||
    /// || row3 || col2 || col3 ||
    /// 
    /// == 格式 ==
    /// 一些格式描述符号
    ///  * 粗体 ''' 用三个连续的单引号括起来的部分是粗体 '''
    ///  * 斜体 /// 三个连续的斜线括起来的部分是斜体 ///
    ///  * 下划线 ___ 三个连续下划线括起来 ___
    ///  * 删除线 --- 三个连续减号括起来 ---
    ///  * 上标 两个连续的上箭头括起来 x^^2^^ 
    ///  * 下标 两个连续的逗号括起来 H,,2,,O
    /// 
    /// 格式描述符可以组合，例如
    ///  * '''___ 加下划线的粗体 ___'''
    /// </remarks>
    public class Class1
    {
        /// <summary>也可以有一些单行的注释</summary>
        /// <returns>简单例子</returns>
        /// <remarks>'''可以使用格式'''</remarks>
        /// <value>value注释中可以使用wiki语法</value>
        /// <exception cref="InvalidOperationException">异常说明中可以使用wiki语法</exception>
        public static string MoreExamples()
        {
            return new Class1().ToString();
        }
    }
}
